#!/usr/bin/env python
# -*- coding: utf-8 -*-
# author:fei time:2019/6/24 21:37


# 闭包
# 函数嵌套
def f1():
    print("外层函数f1")

    def f2():
        print("内层函数f2")

    return f2


# 注意：函数名（）----》函数调用，不带括号，函数名可以看做是一个变量
res = f1()
print(res)  # <function f1.<locals>.f2 at 0x00000238E3D4DBF8>
res()
# 函数里面嵌套函数，外层函数返回内层函数的函数名，这种情况称之为闭包


def f1(num1):
    print(num1)

    def f2(num2):
        res = num1 + num2
        print(res)
    return f2


res = f1(66)
res(88)

"""
1.函数内的变量，函数外部访问不了
2.函数执行完毕后，函数内的变量会被销毁
3.应用场景：如果我们需要在执行完函数后，把函数中的某个变量保存下来
4.操作：在函数内部去定义一个函数，用这个内部函数去引用这个变量，同时将内层函数的函数名当做返回值返回，不调用
5.这个时候内层函数就讲需要保留的变量给包含在它的内存空间了，这就是闭包
"""

# 外层函数的变量为了在函数执行后依然在内存中保存，我们把变量包在内层函数存放，内层函数不调用，不执行，不释放。






